Machine Learning PyTorch Lightning ব্যবহার গাইড ও নোট

335

PyTorch Lightning হল একটি হাই-লেভেল API যা PyTorch এর উপরে তৈরি করা হয়েছে এবং এটি মডেল ট্রেনিং, ইভ্যালুয়েশন, এবং ডিপ লার্নিং গবেষণাকে আরও দ্রুত, সংগঠিত, এবং স্কেলযোগ্য করতে সাহায্য করে। PyTorch Lightning এর মূল উদ্দেশ্য হল PyTorch কোডের পুনরাবৃত্তি হ্রাস করা এবং ডেভেলপারদের জন্য সহজ, পরিষ্কার এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা।

Lightning, PyTorch এর শক্তি বজায় রেখে মডেল ট্রেনিং এবং পরীক্ষণের জন্য সরলীকৃত, সুবিন্যস্ত কৌশল সরবরাহ করে, যা দীর্ঘমেয়াদী প্রকল্পগুলির জন্য খুবই উপকারী। এটি কোডের আরও পরিষ্কারতা এবং ফ্লেক্সিবিলিটি প্রদান করে।


PyTorch Lightning এর সুবিধা

  1. কোডের সচ্ছলতা:
    • Lightning আপনাকে শুধুমাত্র মডেল সম্পর্কিত অংশে মনোযোগ দিতে সহায়ক করে। এটি ডাটা লোডিং, ট্রেনিং লুপ, ইভ্যালুয়েশন, অপটিমাইজার, ব্যাকপ্রোপাগেশন এবং লস ফাংশন ব্যবস্থাপনা করে।
  2. বিপুল স্কেলিং সুবিধা:
    • PyTorch Lightning ব্যবহার করে সহজেই GPU বা একাধিক GPU-তে মডেল প্রশিক্ষণ করা সম্ভব, যার মাধ্যমে প্রশিক্ষণ প্রক্রিয়া দ্রুত এবং দক্ষ হয়।
  3. ইন্টারেক্টিভ ট্রেনিং:
    • মডেল ট্রেনিংয়ের সময় লগিং, মেট্রিক্স সংগ্রহ, ইভ্যালুয়েশন এবং অন্যান্য অনেক কাজ Lightning স্বয়ংক্রিয়ভাবে করতে পারে, যা কোডিংয়ের সময় খরচ কমায়।
  4. সংগঠিত কোড:
    • Lightning ব্যবহার করলে কোডটি পরিষ্কার ও সংগঠিত থাকে, কারণ এতে নির্দিষ্ট কনভেনশন অনুসরণ করতে হয় যা কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।

PyTorch Lightning দিয়ে মডেল তৈরি করা

PyTorch Lightning ব্যবহার করতে হলে আপনি কিছু নির্দিষ্ট ধাপ অনুসরণ করবেন। নিচে একটি সাধারণ কোড উদাহরণ দেওয়া হলো, যেখানে একটি নিউরাল নেটওয়ার্ক মডেল তৈরি করা হয়েছে।

১. PyTorch Lightning ইনস্টলেশন

প্রথমে PyTorch Lightning ইনস্টল করতে হবে:

pip install pytorch-lightning

২. PyTorch Lightning মডেল তৈরি

এখানে একটি সাধারণ Fully Connected Neural Network (FCNN) তৈরি করা হয়েছে, যা MNIST ডেটাসেটে প্রশিক্ষিত হবে।

import torch
from torch import nn
import pytorch_lightning as pl
from torchmetrics.classification import Accuracy
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

class LitModel(pl.LightningModule):
    def __init__(self):
        super(LitModel, self).__init__()
        self.layer_1 = nn.Linear(28 * 28, 128)
        self.layer_2 = nn.Linear(128, 64)
        self.layer_3 = nn.Linear(64, 10)  # 10 classes for MNIST digits
        self.loss_fn = nn.CrossEntropyLoss()
        self.accuracy = Accuracy()

    def forward(self, x):
        x = x.view(-1, 28 * 28)  # Flatten the input
        x = torch.relu(self.layer_1(x))
        x = torch.relu(self.layer_2(x))
        x = self.layer_3(x)
        return x

    def training_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self(x)
        loss = self.loss_fn(y_hat, y)
        return loss

    def validation_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self(x)
        val_loss = self.loss_fn(y_hat, y)
        acc = self.accuracy(y_hat, y)
        return {'val_loss': val_loss, 'acc': acc}

    def validation_epoch_end(self, outputs):
        avg_val_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
        avg_acc = torch.stack([x['acc'] for x in outputs]).mean()
        return {'val_loss': avg_val_loss, 'val_acc': avg_acc}

    def configure_optimizers(self):
        return torch.optim.Adam(self.parameters(), lr=0.001)

# Dataset preparation
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
val_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=64)

# Model training
model = LitModel()
trainer = pl.Trainer(max_epochs=5)
trainer.fit(model, train_loader, val_loader)

কোডের ব্যাখ্যা:

  1. LitModel ক্লাস:
    • pl.LightningModule ক্লাসকে ইনহেরিট করে মডেলটি তৈরি করা হয়। এখানে নিউরাল নেটওয়ার্কের লেয়ারগুলি (ফুলি কানেক্টেড) এবং ফরওয়ার্ড পাস সংজ্ঞায়িত করা হয়েছে।
    • training_step এবং validation_step ফাংশন গুলি ব্যবহৃত হয়েছে, যেখানে প্রতিটি ব্যাচের জন্য লস হিসাব করা হয়।
    • validation_epoch_end ফাংশনটি ব্যবহার করে, একেবারে শেষের পর্যায়ে বৈধকরণ (validation) এর মাধ্যমে গড় লস এবং অ্যাকুরেসি বের করা হয়।
  2. configure_optimizers ফাংশন:
    • এটি অপটিমাইজার কনফিগার করে। এখানে Adam অপটিমাইজার ব্যবহার করা হয়েছে এবং লার্নিং রেট 0.001 নির্ধারণ করা হয়েছে।
  3. ট্রেনিং এবং ভ্যালিডেশন:
    • trainer.fit() ফাংশনটি মডেল ট্রেনিং শুরু করে এবং val_loader দিয়ে মডেলের ভ্যালিডেশন (পরীক্ষা) করা হয়।

PyTorch Lightning এর বৈশিষ্ট্য

  1. সহজ কোডিং: PyTorch Lightning মডেল ট্রেনিং, ভ্যালিডেশন, এবং টেস্টিং প্রক্রিয়া সহজ করে দেয়। আপনাকে শুধু নিউরাল নেটওয়ার্ক আর্কিটেকচার এবং অপটিমাইজার কনফিগারেশন করতে হবে, বাকি কাজ Lightning করবে।
  2. স্কেলেবিলিটি: PyTorch Lightning মডেলকে একাধিক GPU বা TPU তে ট্রেন করার সুবিধা দেয়, যা মডেল ট্রেনিং দ্রুততর এবং দক্ষ করে তোলে। একাধিক GPU ব্যবহার করতে DataParallel বা DistributedDataParallel সাপোর্ট করে।
  3. ক্লিন কোড: Lightning মডেলের কোড খুবই পরিষ্কার এবং সহজ, যাতে ডিবাগিং ও পরীক্ষণের সময় সমস্যা কম হয়।
  4. লগিং ও ভিজ্যুয়ালাইজেশন: PyTorch Lightning বিল্ট-ইন TensorBoard সাপোর্ট করে, যা ট্রেনিং লগ এবং ভিজ্যুয়ালাইজেশন করার জন্য সহজ। আপনি আরও অন্যান্য লগিং লাইব্রেরি যেমন Weights & Biases বা Comet.ml ব্যবহার করতে পারেন।
  5. স্বয়ংক্রিয় চেকপয়েন্টিং: PyTorch Lightning আপনাকে ট্রেনিংয়ের মধ্যে চেকপয়েন্ট সেভিং এবং রিস্টোরিং এর সুবিধা দেয়, যাতে আপনি মাঝপথে ট্রেনিং থামিয়ে পুনরায় চালু করতে পারেন।

PyTorch Lightning এর সাথে GPU ব্যবহার করা

PyTorch Lightning সহজেই GPU তে কাজ করতে পারে। আপনি সহজেই মডেলকে একাধিক GPU তে চালাতে পারেন:

trainer = pl.Trainer(gpus=1)  # এক GPU তে ট্রেনিং
trainer.fit(model, train_loader, val_loader)

একাধিক GPU তে ট্রেনিং করার জন্য:

trainer = pl.Trainer(gpus=2)  # দুটি GPU তে ট্রেনিং

এছাড়া, TPU সাপোর্টও রয়েছে:

trainer = pl.Trainer(tpu_cores=8)  # ৮টি TPU কোরে ট্রেনিং

সারাংশ

PyTorch Lightning PyTorch এর উপরে একটি হাই-লেভেল API যা মডেল ট্রেনিংয়ের জন্য অনেক অস্থায়ী কাজ স্বয়ংক্রিয়ভাবে সম্পাদন করে। এটি মডেল তৈরিতে কোডের পরিমাণ কমিয়ে আনে, ট্রেনিং প্রক্রিয়া সহজ করে, এবং একাধিক GPU বা TPU ব্যবহারের মাধ্যমে স্কেলেবিলিটি বৃদ্ধি করে। PyTorch ব্যবহারকারী যারা নিজের কোডকে আরও পরিষ্কার, দ্রুত, এবং কার্যকরীভাবে লিখতে চান, তাদের জন্য PyTorch Lightning একটি শক্তিশালী টুল।

Content added By
Promotion

Are you sure to start over?

Loading...